<?php
// 保存截图接口
// 使用 flag 参数保存截图到文件系统

require_once 'config.php';

// 设置响应头
setJsonHeader();

try {
    // 只接受POST请求
    if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
        sendErrorResponse('只接受POST请求', 405);
    }
    
    // 获取POST数据
    $input = file_get_contents('php://input');
    $data = json_decode($input, true);
    
    // 检查JSON解析是否成功
    if (json_last_error() !== JSON_ERROR_NONE) {
        sendErrorResponse('JSON格式错误: ' . json_last_error_msg());
    }
    
    // 检查必需字段
    if (!isset($data['flag']) || !isset($data['image'])) {
        sendErrorResponse('缺少必需参数: flag, image');
    }
    
    $flag = $data['flag'];
    $imageData = $data['image'];
    
    // 验证 flag 是否为有效字符串
    if (empty($flag) || !is_string($flag)) {
        sendErrorResponse('无效的项目flag');
    }
    
    // 验证图片数据是否以正确的前缀开始
    if (strpos($imageData, 'data:image/png;base64,') !== 0) {
        sendErrorResponse('无效的图片数据格式');
    }
    
    // 检查图片数据大小（例如最大5MB）
    $base64Data = substr($imageData, strlen('data:image/png;base64,'));
    if (strlen($base64Data) > 5 * 1024 * 1024 * 4/3) { // 5MB的base64编码大约是6.67MB
        sendErrorResponse('图片数据过大');
    }
    
    // 创建 screenshots 目录
    $screenshotsDir = __DIR__ . '/../screenshots';
    if (!file_exists($screenshotsDir)) {
        mkdir($screenshotsDir, 0777, true);
    }
    
    // 构建文件路径
    $imagePath = $screenshotsDir . '/' . $flag . '.png';
    
    // 清理 base64 数据
    $base64Data = str_replace('data:image/png;base64,', '', $imageData);
    $base64Data = str_replace(' ', '+', $base64Data);
    
    // 解码并保存文件
    $imageBinaryData = base64_decode($base64Data);
    $result = file_put_contents($imagePath, $imageBinaryData);
    
    if ($result !== false) {
        sendSuccessResponse(null, '截图保存成功');
    } else {
        sendErrorResponse('截图保存失败');
    }
    
} catch (Exception $e) {
    sendErrorResponse('保存截图失败: ' . $e->getMessage());
}